_IN_ _ROUNDED_RECT_UNIFORM_ transformed_inside_outline;
void main() {
- vec4 f = gl_FragCoord;
- f.x += u_viewport.x;
- f.y = (u_viewport.y + u_viewport.w) - f.y;
+ vec2 frag = get_frag_coord();
- float alpha = clamp(rounded_rect_coverage(decode_rect(transformed_outside_outline), f.xy) -
- rounded_rect_coverage(decode_rect(transformed_inside_outline), f.xy),
+ float alpha = clamp(rounded_rect_coverage(decode_rect(transformed_outside_outline), frag) -
+ rounded_rect_coverage(decode_rect(transformed_inside_outline), frag),
0.0, 1.0);
setOutputColor(final_color * alpha);
_IN_ _ROUNDED_RECT_UNIFORM_ transformed_inside_outline;
void main() {
- vec4 f = gl_FragCoord;
+ vec2 frag = get_frag_coord();
- f.x += u_viewport.x;
- f.y = (u_viewport.y + u_viewport.w) - f.y;
-
- float alpha = clamp (rounded_rect_coverage(decode_rect(transformed_outside_outline), f.xy) -
- rounded_rect_coverage(decode_rect(transformed_inside_outline), f.xy),
+ float alpha = clamp (rounded_rect_coverage(decode_rect(transformed_outside_outline), frag) -
+ rounded_rect_coverage(decode_rect(transformed_inside_outline), frag),
0.0, 1.0);
setOutputColor(final_color * alpha);
_IN_ vec4 color_stops[8];
_IN_ float color_offsets[8];
-
-vec4 fragCoord() {
- vec4 f = gl_FragCoord;
- f.x += u_viewport.x;
- f.y = (u_viewport.y + u_viewport.w) - f.y;
- return f;
-}
-
void main() {
// Position relative to startPoint
- vec2 pos = fragCoord().xy - startPoint;
+ vec2 pos = get_frag_coord() - startPoint;
// Current pixel, projected onto the line between the start point and the end point
// The projection will be relative to the start point!
_IN_ _ROUNDED_RECT_UNIFORM_ transformed_outline;
void main() {
- vec4 f = gl_FragCoord;
-
- f.x += u_viewport.x;
- f.y = (u_viewport.y + u_viewport.w) - f.y;
+ vec2 frag = get_frag_coord();
float alpha = Texture(u_source, vUv).a;
- alpha *= (1.0 - clamp(rounded_rect_coverage(decode_rect(transformed_outline), f.xy), 0.0, 1.0));
+ alpha *= (1.0 - clamp(rounded_rect_coverage(decode_rect(transformed_outline), frag), 0.0, 1.0));
vec4 color = final_color * alpha;
#endif
}
-void setOutputColor(vec4 color) {
- vec4 f = gl_FragCoord;
+#ifdef GSK_GL3
+layout(origin_upper_left) in vec4 gl_FragCoord;
+#endif
+
+vec2 get_frag_coord() {
+ vec2 fc = gl_FragCoord.xy;
+
+#ifdef GSK_GL3
+ fc += u_viewport.xy;
+#else
+ fc.x += u_viewport.x;
+ fc.y = (u_viewport.y + u_viewport.w) - fc.y;
+#endif
- f.x += u_viewport.x;
- f.y = (u_viewport.y + u_viewport.w) - f.y;
+ return fc;
+}
+void setOutputColor(vec4 color) {
+ vec2 f = get_frag_coord();
// We do *NOT* transform the clip rect here since we already
// need to do that on the CPU.
#if defined(GSK_GLES) || defined(GSK_LEGACY)
- gl_FragColor = color * rounded_rect_coverage(create_rect(u_clip_rect), f.xy);
+ gl_FragColor = color * rounded_rect_coverage(create_rect(u_clip_rect), f);
#else
- outputColor = color * rounded_rect_coverage(create_rect(u_clip_rect), f.xy);
+ outputColor = color * rounded_rect_coverage(create_rect(u_clip_rect), f);
#endif
/*outputColor = color;*/
}
_IN_ _ROUNDED_RECT_UNIFORM_ transformed_inside_outline;
void main() {
- vec4 f = gl_FragCoord;
+ vec2 frag = get_frag_coord();
- f.x += u_viewport.x;
- f.y = (u_viewport.y + u_viewport.w) - f.y;
-
- float alpha = clamp(rounded_rect_coverage(decode_rect(transformed_outside_outline), f.xy) -
- rounded_rect_coverage(decode_rect(transformed_inside_outline), f.xy),
+ float alpha = clamp(rounded_rect_coverage(decode_rect(transformed_outside_outline), frag) -
+ rounded_rect_coverage(decode_rect(transformed_inside_outline), frag),
0.0, 1.0);
setOutputColor(final_color * alpha);